import { Tag } from "server/models/Tag";
import { successResponse, errorResponse } from "server/utils/response";

export default defineEventHandler(async (event) => {
  try {
    const tagId = getRouterParam(event, "id");
    if (!tagId) {
      return errorResponse("参数错误", "标签ID不能为空");
    }

    // 获取标签信息
    const allTags = await Tag.getTagsWithPostCount();
    const existingTag = allTags.find((t) => t.id?.toString() === tagId);

    if (!existingTag) {
      return errorResponse("标签不存在", "指定的标签不存在");
    }

    const body = await readBody(event);
    const { name, slug, color } = body;

    // 验证必需字段
    if (!name || !name.trim()) {
      return errorResponse("参数错误", "标签名称不能为空");
    }

    // 使用提供的slug或生成slug
    let tagSlug =
      slug && slug.trim()
        ? slug
            .trim()
            .toLowerCase()
            .replace(/\s+/g, "-")
            .replace(/[^\w\-]+/g, "")
            .replace(/\-+/g, "-")
            .replace(/^-+/, "")
            .replace(/-+$/, "")
        : existingTag.slug;

    if (!tagSlug) {
      return errorResponse("参数错误", "标签别名不能为空");
    }

    // 验证slug格式
    if (!/^[a-z0-9-]+$/.test(tagSlug)) {
      return errorResponse(
        "参数错误",
        "标签别名只能包含小写字母、数字和连字符"
      );
    }

    // 如果slug改变，检查是否已存在
    if (tagSlug !== existingTag.slug) {
      if (await Tag.isSlugExists(tagSlug, existingTag.id)) {
        return errorResponse("更新失败", "标签别名已存在，请使用其他别名");
      }
    }

    const updateData = {
      name: name.trim(),
      slug: tagSlug,
      color: color ? color.substring(0, 7) : existingTag.color || "#1890ff", // 限制为7个字符
    };

    const success = await Tag.updateTag(tagId, updateData);

    if (!success) {
      return errorResponse("更新失败", "标签更新失败");
    }

    // 获取更新后的标签信息
    const updatedTags = await Tag.getTagsWithPostCount();
    const updatedTag = updatedTags.find((t) => t.id?.toString() === tagId);

    if (!updatedTag) {
      return errorResponse("更新失败", "无法获取更新后的标签信息");
    }

    // 格式化返回数据
    const formattedTag = {
      id: updatedTag.id?.toString() || "",
      name: updatedTag.name,
      slug: updatedTag.slug,
      color: updatedTag.color || "#1890ff",
      postCount: updatedTag.post_count || 0,
      status:
        updatedTag.post_count && updatedTag.post_count > 0
          ? "active"
          : "inactive",
      createdAt: updatedTag.created_at
        ? new Date(updatedTag.created_at).toISOString().split("T")[0]
        : "",
      updatedAt: updatedTag.updated_at
        ? new Date(updatedTag.updated_at).toISOString().split("T")[0]
        : "",
    };

    return successResponse(formattedTag, "标签更新成功");
  } catch (error) {
    console.error("更新标签失败:", error);
    return errorResponse(
      "更新标签失败",
      error instanceof Error ? error.message : "未知错误"
    );
  }
});
